<?php
/**
 * Настройка автоматического загрузчика классов в неймспейсе 
 */
$loader = new Autoloader();
$loader->registerNamespaces(array(
	'Zoggi\\Database' => __DIR__ . '/Database',
	'Zoggi\\Config' => __DIR__ . '/Config',
	'Sbm\\ControlPanel' => __DIR__ . '/Sbm/ControlPanel',
	'Sbm\\WebSMS' => __DIR__ . '/Sbm/WebSMS',
	'Sbm' => __DIR__ . '/Sbm'
));
$loader->register();

class Autoloader
{

	protected $namespaceMap;

	public function registerNamespace( $namespace, $path )
	{
		$this->namespaceMap[$namespace] = $path;
	}

	public function registerNamespaces( $namespaceMap )
	{
		foreach ($namespaceMap as $namespace => $path)
		{
			$this->namespaceMap[$namespace] = $path;
		}
	}

	public function register( $prepend = false )
	{
		spl_autoload_register(array($this, 'loadClass'), true, $prepend);
	}

	public function loadClass( $className )
	{
		if ( $file = $this->findFile($className) )
		{
			require_once( $file );
		}
	}

	public function findFile( $className )
	{
		$pos = strrpos($className, "\\");
		$nsPath = substr($className, 0, $pos);
		$nsName = substr($className, $pos + 1);
		foreach ($this->namespaceMap as $namespace => $dir)
		{
			if ( strpos($nsPath, $namespace) === 0 )
			{
				$fileClassName = $dir . '/' . $nsName . '.php';
				$fileExceptionName = $dir . '/Exceptions.php';
				if ( strstr($nsName, 'Exception') !== false && file_exists($fileExceptionName) )
				{
					return $fileExceptionName;
				}
				elseif ( file_exists($fileClassName) )
				{
					return $fileClassName;
				}
				else
				{
					return false;
				}
			}
		}
		return false;
	}

}